package com.itheima.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class BookDaoTestCase {
    @Autowired
    private BookDao bookDao;
    @Test
    void testSelectAll(){

        /**
         * 测试查询所有
         */
        System.out.println(bookDao.selectList(null));

        /**
         * 测试插入数据
         */
    }
    @Test
    void testInsert(){
        Book book = new Book();
        book.setType("测试数据");
        book.setName("测试数据");
        book.setDescription("测试数据");
        int insert = bookDao.insert(book);

    }


    /**
     * 测试更新数据
     */
    @Test
    void testUpdate(){
        Book book = new Book();
        book.setId(22);
        book.setType("测试数据11111");
        book.setName("测试数据111");
        book.setDescription("测试数据111");
        bookDao.updateById(book);
    }

    /**
     * 分页查询
     */
    @Test
    void testSelectByPages(){
        //要是不设置泛型，mp就会自动识别
        IPage<Book> page=new Page<>(2,5);
        //这里的queryWrapper不传入，表示没有查询的格外条件，只是做一个简单的分页
        IPage<Book> page1 = bookDao.selectPage(page, null);
        System.out.println(page1.getRecords());

    }

    /**
     * 按条件查询，得到的是一条条的数据，也可以设置投影来改变结果显示的样式
     * 各种各样的查询都有，模糊查询，聚合函数等待
     */
    @Test
    void testSelectByList(){
//        QueryWrapper<Book> qw=new QueryWrapper<>();
        //要是传入的参数是空的话，此时的sql样子是这样的
        // %null%,这就完蛋了，和我们想的不一样
        String name= "spring";
        LambdaQueryWrapper<Book> lqw=new LambdaQueryWrapper<>();
        lqw.like(null!=name,Book::getName,name);
        //==>  Preparing: SELECT id,type,name,description FROM tbl_book WHERE (name LIKE ?)
        //==> Parameters: %Spring%(String)
        List<Book> books = bookDao.selectList(lqw);
    }
}
